import { defineStore } from 'pinia'
import { ref } from 'vue'
import { authAPI } from '@/api/auth'
import { ElMessage } from 'element-plus'
import { useMenuStore } from './menu'

export const useUserStore = defineStore('user', () => {
  const userInfo = ref({
    userId: null,
    username: '',
    realName: '',
    avatar: null
  })

  const isLoggedIn = ref(false)

  // 登录
  const login = async (loginData) => {
    try {
      const result = await authAPI.login(loginData)

      if (result.success) {
        const { token, userId, username, realName, avatar } = result.data

        // 保存token
        localStorage.setItem('token', token)

        // 保存用户信息
        userInfo.value = {
          userId,
          username,
          realName,
          avatar
        }

        isLoggedIn.value = true

        // 登录成功后获取用户菜单
        const menuStore = useMenuStore()
        await menuStore.getCurrentUserMenu()
        
        // 注意：不在这里添加动态路由，让路由守卫来处理

        return { success: true, message: result.message }
      } else {
        return { success: false, message: result.message }
      }
    } catch (error) {
      console.error('登录失败:', error)
      return { success: false, message: '登录失败，请稍后重试' }
    }
  }

  // 退出登录
  const logout = async () => {
    try {
      // 调用登出API
      await authAPI.logout()
    } catch (error) {
      console.error('登出API调用失败:', error)
    } finally {
      // 无论API调用是否成功，都清除本地数据
      userInfo.value = {
        userId: null,
        username: '',
        realName: '',
        avatar: null
      }
      isLoggedIn.value = false
      localStorage.removeItem('token')
      
      // 清除菜单数据
      const menuStore = useMenuStore()
      menuStore.clearMenu()
      
      // 重置动态路由状态
      const { resetDynamicRoutes } = await import('@/router')
      resetDynamicRoutes()
    }
  }

  // 检查登录状态
  const checkAuth = async () => {
    console.log('检查用户认证状态')
    const token = localStorage.getItem('token')
    console.log('本地存储的token:', token ? '存在' : '不存在')
    
    if (token) {
      isLoggedIn.value = true
      console.log('设置用户为已登录状态')
      
      // 如果有token但没有菜单数据，重新获取菜单
      const menuStore = useMenuStore()
      if (menuStore.menuTree.length === 0) {
        console.log('菜单数据为空，开始获取菜单')
        try {
          await menuStore.getCurrentUserMenu()
          console.log('菜单获取完成，路由将由路由守卫处理')
        } catch (error) {
          console.error('获取菜单失败:', error)
          // 如果获取菜单失败，可能token已过期，清除登录状态
          console.log('菜单获取失败，清除登录状态')
          logout()
        }
      } else {
        console.log('菜单数据已存在，跳过加载')
      }
    } else {
      console.log('没有token，用户未登录')
      isLoggedIn.value = false
    }
  }

  return {
    userInfo,
    isLoggedIn,
    login,
    logout,
    checkAuth
  }
})